package md;

import dp.CategoriaDP;
import java.sql.*;
import java.util.*;


/**
 *La clase CategoriaMD maneja los datos de la tabla categoria de la BDD
 * @author Shalom Martinez
 */
public class CategoriaMD {
    CategoriaDP categoriaDP;
    ResultSet resultset;

    /**Constructor
     * con el objeto CategoriaDP
     *
     */
    public CategoriaMD(CategoriaDP parCategoriaDP) {
        categoriaDP=parCategoriaDP;


    }

  /**
     * Método para ingresar una nueva categoría en la BDD
     *
     * @return Devuelve TRUE si es que se ingresa correctamente  en
     * la BDD.
     */

    public boolean ingresarCategoria(int codigo, String tipo, String descripcion) {
       boolean retorno = false;
       String sql = "";
       sql = "INSERT INTO \"Categoria\" " +
                "(\"codigoCategoria\", \"tipoCategoria\", \"descripcionCategoria\")" +
                " VALUES ('" + codigo +
                "', '" + tipo +
                "', '" + descripcion + "')";
      try {
            Statement stmt = Db.getDb().getConexion().createStatement();
            if (stmt.executeUpdate(sql) > 0) {
                retorno = true; }
            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return retorno;

    }

 /**
     * Método para modificar una categoría en la BDD
     *
     * @return Devuelve TRUE si es que se modifica correctamente en
     * la BDD.
     */
    public boolean modificarCategoria(String tipo, String descripcion, int codigo) {
        boolean retorno = false;
        String sql = "";
        sql = "UPDATE \"Categoria\" SET" +
                "\"tipoCategoria\"=\'" + tipo + "\', \"descripcionCategoria\"=\'" + descripcion + "\'" +
                " WHERE \"codigoCategoria\"=" + codigo;

        try {
            Statement stmt = Db.getDb().getConexion().createStatement();
            if (stmt.executeUpdate(sql) > 0) {
                retorno = true;
            }
            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return retorno;
    }
 /**
     * Método para eliminar una categoría en la BDD
     *
     * @return Devuelve TRUE si es que se elimina correctamente en
     * la BDD.
     */
    public boolean eliminarCategoria(int codigo) {
        boolean retorno = false;
        String sql = "";
        sql = "DELETE FROM \"Categoria\"" +
                " WHERE \"codigoCategoria\"=" + codigo;

        try {
            Statement stmt = Db.getDb().getConexion().createStatement();
            if (stmt.executeUpdate(sql) > 0) {
                retorno = true;
            }
            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return retorno;
    }
 /**
     * Método para obtener todos los datos de la tabla categoría  en la BDD
     *
     * @return Devuelve una LISTA con los datos de
     * la BDD.
     */
    public List<String[]> consultarCategoriaGeneral() {
        List<String[]>  retorno=new ArrayList <String []>();
        String sql = "";
        sql = "SELECT \"codigoCategoria\" , \"tipoCategoria\", \"descripcionCategoria\"FROM \"Categoria\"";

        try {
            Statement stmt = Db.getDb().getConexion().createStatement();
            if (stmt.executeUpdate(sql) > 0) {
                    resultset = stmt.executeQuery(sql);
                   while(resultset.next()){
                   String [] datos=new String[3];
                   datos[0]=resultset.getString(1);
                   datos[1]=resultset.getString(2);
                   datos[2]=resultset.getString(3);

                   retorno.add(datos);

                   }
            }
            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return retorno;
    }
 /**
     * Método para obtener los datos determinados por un parametro
     * de la tabla categoría  en la BDD
     * @return Devuelve un ARREGLO de tipo String con los datos de
     * la categoría especifica
     */
     public String[] consultarCategoriaParametros(int codigo) {
        String[]  retorno=new String[3];
        String sql = "";
        sql = "SELECT \"codigoCategoria\" , \"tipoCategoria\", \"descripcionCategoria\"FROM \"Categoria\"" +
                " WHERE \"codigoCategoria\"=" + codigo;
        try {
            Statement stmt = Db.getDb().getConexion().createStatement();
            if (stmt.executeUpdate(sql) > 0) {
                    resultset = stmt.executeQuery(sql);
                   while(resultset.next()){

                   retorno[0]=resultset.getString(1);
                   retorno[1]=resultset.getString(2);
                   retorno[2]=resultset.getString(3);



                   }
            }
            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return retorno;
    }

 /**
     * Método para verificar una categoría  en la BDD
     *
     * @return Devuelve TRUE si es que existe una categoría en
     * la BDD.
     */
    public boolean  verificarCategoria() {
    boolean retorno=false;
      String sql = "";
      sql = "SELECT \"tipoCategoria\", \"descripcionCategoria\"FROM \"Categoria\"" +
                " WHERE \"codigoCategoria\"=" + categoriaDP.getCodigoCategoria();
        try {
            Statement stmt = Db.getDb().getConexion().createStatement();
            if (stmt.executeUpdate(sql) > 0) {
                resultset= stmt.executeQuery(sql);
             while(resultset.next()){
                retorno=true;
                categoriaDP.setTipoCategoria(resultset.getString(1));
                categoriaDP.setDescripcionCategoria(resultset.getString(2));

                }
            }
            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }


        return retorno;
    }
    /**
     * Método para obtener los datos de una categoria
     *
     * @return Devuelve un arreglo tipo String con los datos de 
     * la BDD.
     */
public String[] regresarDatos(int codigo) {

        String[] retorno = new String[3];
        try {

            String sql = "";

            sql = "Select * FROM \"Categoria\"" +
                    " WHERE \"codigoCategoria\"=" + codigo;
            System.out.println(sql);
            Statement stmt = Db.getDb().getConexion().createStatement();
            ResultSet rs = stmt.executeQuery(sql);
            while (rs.next()) {
                retorno[0] = rs.getString("codigoCategoria");
                retorno[1] = rs.getString("tipoCategoria");
                retorno[2] = rs.getString("descripcionCategoria");

                System.out.println(retorno[0]+":"+retorno[1]+":"+retorno[2]);
            }
            stmt.close();
        } catch (SQLException ex) {
            System.out.println("No se ha podido ejecutar la sentencia SQL");
        }

        return retorno;

    }
}
